package Java.BlackHorse.Function;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Predicate;

public class FunctionDemo3 {
    /*
    * 引用方法（引用成员方法）
    * 格式：
    *       其它类： 其它类对象：：方法名
    *        静态类中无 this , super
    *       本类： this：：方法名  引用处不能是静态类
    *       父类： super：：方法名   引用处不能是静态类
    *
    *  方法引用：
        1. 引用处需是函数式接口

        2. 被引用的方法需要存在
        3. 被引用方法的形参和返回值需跟抽象方法的返回值保持一致
        4. 被引用的方法的功能需满足当前需求
    * */
    public static void main(String[] args) {
        /*
        * 需求  ：
        *       集合中有一些名字，按照要求过滤数据
        *       数据："张三丰","周芷若","赵敏","张强","张无忌"
        *       要求： 只要以 张 开头，而且名字是三个字
        * */
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张三丰","周芷若","赵敏","张强","张无忌");

        //过滤数据 常规方法
//        list.
//                stream().
//                filter(s -> s.length()==3 && s.startsWith("张")).
//                forEach(s -> System.out.println(s));

//          list.stream().filter(new Predicate<String>() {
//              @Override
//              public boolean test(String s) {
//                  return s.startsWith("张") && s.length()==3;
//              }
//          }).forEach(s -> System.out.println(s));

        //方法引用
        list.stream().filter(new StringOperation()::stringJudge).forEach(s -> System.out.println(s));
    }
}
